package com.xhu.utils;

import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Apche  commons
 * StringUtils
 * 格式化工具类
 * @author laoda
 *
 */
public class FormatUtils {

	private FormatUtils(){}
	//所有的方法  必须是静态的 才可以调用
	/**
	 *  返回String  是否有值
	 * 作者:老大
	 * 创建时间:2022年8月15日下午2:16:08
	 * @param str
	 * @return
	 */
	public static  boolean  isBlank(String  str){//""  null  "    "  null
		if(str==null)
			return  true;
		if(str.length()==0)
			return  true;
		if(str.trim().length()==0)
			return  true;
		return false;
	}
	/**
	 * 返回去掉收尾空格的字符串  否则都是返回  null
	 * 作者:老大
	 * 创建时间:2022年8月15日下午4:34:08
	 * @param str
	 * @return
	 */
	public static  String  formatString(String  str){//"" =null  "    "=null
		if(str==null)
			return  str;
		if(str.length()==0)
			return  null;
		if(str.trim().length()==0)
			return  null;
		return str.trim();
	}

	/**
	 * 判断是不是数字
	 * 作者:老大
	 * 创建时间:2022年8月15日下午2:21:02
	 * @param str
	 * @return
	 */
	public static  boolean  isLong(String  str){//""  null  "    "  null
		return stringFormatLong(str)!=null;

	}

	/**
	 * 判断数字是否大于0
	 * @param num
	 * @return
	 */
	public  static  boolean isPositive(Integer  num){
		if(num!=null)
			return num>0;
		return  false;
	}
	public  static  boolean isPositive(String  str){
		return stringFormatLong(str)!=null && stringFormatLong(str)>0;
	}
	/**
	 * 把字符串格式化成 Integer
	 * 作者:老大
	 * 创建时间:2022年8月15日下午2:23:47
	 * @param str
	 * @return
	 */
	public static  Long  stringFormatLong(String  str){
		if(isBlank(str))
			return  null;
		try{

			return  Long.parseLong(str);//是数字
		}catch(Exception  e){
			return  null;//不是数字
		}
	}

	/**
	 * 判断是不是数字
	 * 作者:老大
	 * 创建时间:2022年8月15日下午2:21:02
	 * @param str
	 * @return
	 */
	public static  boolean  isInteger(String  str){//""  null  "    "  null
		return stringFormatInteger(str)!=null;

	}
	/**
	 * 把字符串格式化成 Integer
	 * 作者:老大
	 * 创建时间:2022年8月15日下午2:23:47
	 * @param str
	 * @return
	 */
	public static  Integer  stringFormatInteger(String  str){
		if(isBlank(str))
			return  null;
		try{

			return  Integer.parseInt(str);//是数字
		}catch(Exception  e){
			return  null;//不是数字
		}
	}
	/**
	 * 判断是不是Double
	 * 作者:老大
	 * 创建时间:2022年8月15日下午2:21:02
	 * @param str
	 * @return
	 */
	public static  boolean  isDouble(String  str){//""  null  "    "  null
		return stringFormatDouble(str)!=null;

	}
	/**
	 * 把字符串格式化成 Double
	 * 作者:老大
	 * 创建时间:2022年8月15日下午2:24:31
	 * @param str
	 * @return
	 */
	public static  Double  stringFormatDouble(String  str){
		try{
			return  Double.parseDouble(str);//是数字
		}catch(Exception  e){
			return  null;//不是数字
		}
	}
	//定义变量
	private static  SimpleDateFormat  simpleDateFormat;
	private  static  DecimalFormat   decimalFormat;//
	//固定格式 数据
	private  static final String  EDATE_PATTERN="yyyy-MM-dd";//英文版的 年月日
	private  static final String  EDATETIME_PATTERN="yyyy-MM-dd  HH:mm:ss";//英文版的年月日时分秒
	private  static final String  CDATETIME_PATTERN="yyyy年MM月dd日  HH:mm:ss";//中文版的 年月日
	private  static final String  CDATE_PATTERN="yyyy年MM月dd日";

	/*第一:该类提供如下方法将Date对象转换为指定模式的字符串对象,将字符串日期时间按照指定模式解析为日期时间对象;
	 * Date  --->  String
	 * 1.yyyy-MM-dd
	 * 2.yyyy-MM-dd  HH:mm:ss
	 * 3.yyyy年MM月dd日
	 * 4.yyyy年MM月dd日  HH:mm:ss
	 * 5.指定格式
	 *
	 * String  --->  Date
	 * */
	/**
	 * 获得当前日期的字符串
	 * @return
	 */
	static	public  String  getStringNewDate(){
		return  getStringDate(new  Date(),EDATE_PATTERN);
	}
	/**
	 * 把日期按 yyyy-MM-dd默认格式进行解析成字符串
	 * @param date  日期
	 * @return
	 */
	static	public  String  getStringDate(Date  date){
		return  getStringDate(date,EDATE_PATTERN);
	}
	/**
	 * 把日期按 yyyy-MM-dd  HH:mm:ss 默认格式进行解析成字符串
	 * @param date  日期
	 * @return
	 */
	static	public  String  getStringDateTime(Date  date){
		return  getStringDate(date,EDATETIME_PATTERN);
	}
	/**
	 * 把日期按 yyyy年MM月dd日 默认格式进行解析成字符串
	 * @param date  日期
	 * @return
	 */
	static	public  String  getStringChinaDate(Date  date){
		return  getStringDate(date,CDATE_PATTERN);
	}
	/**
	 * 把日期按 yyyy年MM月dd日  HH:mm:ss 默认格式进行解析成字符串
	 * @param date  日期
	 * @return
	 */
	static	public  String  getStringChinaDateTime(Date  date){
		return  getStringDate(date,CDATETIME_PATTERN);
	}
	/**
	 * 用户自己给指定的格式进行解析
	 * @param date
	 * @param pattern
	 * @return
	 */
	static 	public  String  getStringDate(Date  date,String pattern){
		simpleDateFormat=new SimpleDateFormat(pattern);
		if(date!=null && pattern!=null)
			return  simpleDateFormat.format(date);
		return null;
	}

	/**
	 *   按指定格式进行解析字符串
	 * @param time
	 * @param pattern
	 * @return
	 * @
	 */
	static 	public  Date  getDate(String  time,String pattern)  {//抛出
		//  时间直接是 null    时间=""
		if(time==null ||  isBlank(time)){
			return   null;
		}
		simpleDateFormat=new SimpleDateFormat(pattern);
		try {
			return  simpleDateFormat.parse(time);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return   null;
	}

	/**
	 * 把字符串按照  yyyy-MM-dd 进行解析成 Date
	 * @param time
	 * @return
	 * @
	 */
	static 	public  Date  getDate(String  time) {
		return  getDate(time,EDATE_PATTERN);
	}
	/**
	 * 把字符串按照  yyyy-MM-dd HH:mm:ss 进行解析成 Date
	 * @param time
	 * @return
	 * @
	 */
	static 	public  Date  getDateTime(String  time) {
		return  getDate(time,EDATETIME_PATTERN);
	}

	/**
	 * 把字符串按照  yyyy年MM月dd日  进行解析成 Date
	 * @param time
	 * @return
	 * @
	 */
	static 	public  Date  getChinaDate(String  time) {
		return  getDate(time,CDATE_PATTERN);
	}
	/**
	 * 把字符串按照  yyyy年MM月dd日  HH:mm:ss  进行解析成 Date
	 * @param time
	 * @return
	 * @
	 */
	static 	public  Date  getChinaDateTime(String  time) {
		return  getDate(time,CDATETIME_PATTERN);
	}

}
